import fs from 'fs'
import { parse } from '@vue/compiler-sfc'
import { globSync } from 'glob'
import path from 'path'

const outputDir = './public/code'
if (!fs.existsSync(outputDir)) {
  fs.mkdirSync(outputDir, { recursive: true })
}

// 读取所有 button 组件
const files = globSync('./src/components/*/*.vue')

const sources = {}

// files.forEach(file => {
//   const content = fs.readFileSync(file, 'utf-8')
//   const { descriptor } = parse(content)
//   // const filename = file.split('/').pop().replace('.vue', '')
// const filename = path.basename(file, '.vue')  // 自动去掉 .vue，不管路径分隔符
//   sources[filename] = {
//     template: descriptor.template ? descriptor.template.content.trim() : '',
//     script: descriptor.script ? descriptor.script.content.trim() : '',
//     style: descriptor.styles
//       .filter(s => s.scoped)
//       .map(s => s.content.trim())
//       .join('\n\n')
//   }
// })

files.forEach(file => {
  const content = fs.readFileSync(file, 'utf-8');
  const { descriptor } = parse(content, { filename: file });
  
  // 获取文件名
  const filename = path.basename(file, '.vue'); // 自动去掉 .vue，不管路径分隔符
  
  // 处理 script 和 script setup
  let scriptContent = '';
  if (descriptor.script) {
    scriptContent += descriptor.script.content.trim();
  }
  if (descriptor.scriptSetup) {
    // 对于 <script setup>，我们直接获取其内容。注意：这不会转换为 options API。
    scriptContent += `\n${descriptor.scriptSetup.content.trim()}`;
  }

  sources[filename] = {
    template: descriptor.template ? descriptor.template.content.trim() : '',
    script: scriptContent,
    style: descriptor.styles
      .filter(s => s.scoped)
      .map(s => s.content.trim())
      .join('\n\n')
  };
});

// 生成 JSON 文件
fs.writeFileSync(
  './public/code/sources.json',
  JSON.stringify(sources, null, 2)
)

console.log('✅ 源码已生成：/public/code/sources.json')